#include "ThreadPool.hpp"
#include "Task.hpp"
#include "Log.hpp"
#include <iostream>
#include <string>
#include <memory>
#include <ctime>

int main()
{
    // 获取单例的可能是多线程啊！！！
    // 程序已经加载
    LOG(DEBUG, "程序已经加载");
    sleep(3);                        // 休眠3秒，模拟程序启动过程
    ThreadPool<Task>::GetInstance(); // 第一次获取线程池单例
    sleep(2);                        // 休眠2秒

    ThreadPool<Task>::GetInstance(); // 第二次获取线程池单例
    sleep(2);

    ThreadPool<Task>::GetInstance(); // 第三次获取线程池单例
    sleep(2);

    ThreadPool<Task>::GetInstance(); // 第四次获取线程池单例
    sleep(2);

    ThreadPool<Task>::GetInstance()->Wait(); // 等待所有线程结束
    sleep(2);

    return 0;
}

// class A
// {
// public:
//     void func()
//     {
//         printf("hello world\n");
//     }
// };
// class B : public A
// {
// public:
//     void test()
//     {
//         static int count = 0;
//         A::func();
//         count++;
//         printf("func:%d\n", count);
//     }
// };
// int main()
// {
//     srand(time(nullptr) ^ getpid() ^ pthread_self());
//     EnableScreen();
//     std::unique_ptr<ThreadPool<Task>> tp = std::make_unique<ThreadPool<Task>>(5);
//     tp->InitThreadPool();
//     tp->Start();
//     int tasknum = 10;
//     while (tasknum)
//     {
//         int a = rand() % 100;
//         usleep(1234);
//         int b = rand() % 5 + 1;
//         Task t(a, b);
//         LOG(INFO, "main thread push task:%s", t.DebugToString().c_str());
//         tp->Enqueue(t);
//         sleep(1);
//         taksnum--;
//     }
//     tp->Stop();
//     tp->Wait();
//     return 0;
// }